# This script tries to disable VSIXAutoUpdate. In case an update is seen as already running,
# it will exit with an error.
steps:
  - powershell: |
      schtasks /change /tn "\Microsoft\VisualStudio\VSIX Auto Update" /disable

      $vswhere = "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe"
      if (-not (Test-Path -Path "$vswhere" -PathType Leaf))
      {
          Write-Error "Couldn't locate vswhere at $vswhere"
          exit 1
      }

      $vsdir = &"$vswhere" -latest -prerelease -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath
      $vsregedit = "$vsdir\Common7\IDE\VsRegEdit.exe"

      if (-not (Test-Path -Path "$vsregedit" ))
      {
          Write-Error "VSWhere returned path: $vsdir, but regedit $vsregedit doesn't exist."
          exit 1
      }

      Write-Output "VSWhere returned path: $vsdir, using regedit $vsregedit"
      Write-Output "Disabling updates through VS Registry:"

      &"$vsdir\Common7\IDE\VsRegEdit.exe" set local HKCU ExtensionManager AutomaticallyCheckForUpdates2Override dword 0
      &"$vsdir\Common7\IDE\VsRegEdit.exe" read local HKCU ExtensionManager AutomaticallyCheckForUpdates2Override dword

      $processes = Get-Process -Name VSIXAutoUpdate -ErrorAction SilentlyContinue | %{ $_.Id }

      if ($processes -ne $null -and $processes.Count -gt 0)
      {
        Write-Output "VSIXAutoUpdate has already spawned. Waiting for process(es) $processes for up to 5 min."
        if (-not (Wait-Process -Id $processes -Timeout 300))
        {
          Write-Error "VSIXAutoUpdate has already spawned. Failfast to allow retry"
          exit 1
        }
      }

      $status = &"$vswhere" -latest -prerelease -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -format json | ConvertFrom-Json
      if ($status.isLaunchable -and -not $status.isRebootRequired)
      {
        Write-Output "VS in usable state"
      }
      else
      {
        Write-Error "VS in not in a usable state. Updates or image generation left the machine in a poor state."
        exit 1
      }

    displayName: Disable VSIX updates or fail-fast
    condition: always()
